//同以目录下的文件更名：
const fs = require("fs");
const path = require("path");
const os = require("os");
const { addAbortSignal } = require("stream");
const { start } = require("repl");
const { log } = require("console");
// 包含当前文件夹所有内容的数组
let allFiles = fs.readdirSync(__dirname);
// 更名操作
function my_rename(oldName, newName) {
  fs.rename(oldName, newName, function (err) {
    if (err) {
      throw err;
    }
    // console.log("rename is done!");
  });
}
// 验证结尾后缀是否为真。str文件的名字。appoint文件后缀的名字
function my_validationEnd(str, appoint) {
  // 不区分大小写全部转换成小写。
  str = str.toLowerCase();
  let tempArr = str.split(".");
  let endStr = tempArr[tempArr.length - 1];
  if (appoint === endStr) {
    return true;
  }
  return false;
}
// 过滤数组的方法，返回我想要的文件类型的数组。第一个参数文件数组。第二个参数后缀名，字符串。
function type_arr(arr, typeStr) {
  let newArr = [];
  for (let i in arr) {
    if (my_validationEnd(arr[i], typeStr)) {
      newArr.push(arr[i]);
    }
  }
  return newArr;
}

// 判断是否文件夹
function my_isFold(fileOrFoldName) {
  return fs.lstatSync(fileOrFoldName).isDirectory();
}

// 获取文件的大小
function getSize(file) {
  let msg = fs.statSync(file);
  // console.log('msg', msg.size);
  return {
    name: file,
    size: msg.size,
  };
}
// getSize('script_ouMeiFilefold文件夹的名字赋给mp4.js')
// console.log('文件大小', getSize('script_ouMeiFilefold文件夹的名字赋给mp4.js'));
// 过滤数组，只留下文件夹的数组 arr一般是allFiles
function onlyFold_arr(arr = allFiles) {
  let newArr = [];
  for (let i in arr) {
    if (my_isFold(arr[i])) {
      newArr.push(arr[i]);
    }
  }
  return newArr;
}
// console.log('onlyFole', onlyFold_arr());
// 验证是否是数字 只能判断一位数
function isNum(num) {
  let pattern = /^[0-9]$/;
  /* let str='123'
    let str4='1'
    let str3='9'
    let str2='12a'
    console.log(pattern.test(str));
    console.log(pattern.test(str2));
    console.log(pattern.test(str3));
    console.log(pattern.test(str4)); */
  return pattern.test(num);
}
// 判断是否是小写 一位
function isLow(str) {
  let pattern = /^[a-z]$/;
  return pattern.test(str);
}

// 快速排序 递归一定不要用Let，因为一旦出了作用域就失效了。不改变原数组
function my_quick_sort(arr) {
  if (arr.length < 2) return arr;
  let piIndex = Math.floor(arr.length / 2);
  //    拿走中间值
  let pi = arr.splice(piIndex, 1)[0];
  let left = [];
  let right = [];
  for (let i in arr) {
    if (arr[i] < pi) {
      left.push(arr[i]);
    } else {
      right.push(arr[i]);
    }
  }
  return my_quick_sort(left).concat(pi, my_quick_sort(right));
}
let testarr = [1, 2, 2, 1, 5, 4, 0];
// console.log('quick', quick_sort(testarr));
// console.log(testarr.splice(0,1),'testarr');//只有一项的数组
//这里的fileType压根就没用到，谁大小最大，就以哪个文件为准
function my_foldNameTofile(fileType = "txt") {
  // 文件夹名字的数组
  let foldArr = onlyFold_arr();
  // console.log(foldArr, "foldarr");
  // fold就是每一个文件夹
  foldArr.forEach((fold) => {
    // console.log(path.join(__dirname, fold), '路径名');
    let pathName = path.join(__dirname, fold); //E:\projects\node_practice\script-jiaoBen\test\新建文件夹
    //文件夹里面的每一个文件
    let foldFilesArr = fs.readdirSync(pathName);
    // console.log("foldFiles", foldFilesArr);
    // slice里面：-2下标就表示倒数第二个下标，optimezeFoldName是优化后的文件夹名字
    let optimizeFoldName = fold.slice(0, -8);
    // 循环单个文件夹下面的jpg图片们
    foldFilesArr.forEach((item, index) => {
      // console.log("item+index",item,index,pathName);
      let lastPointIndex = item.lastIndexOf(".");
      // let startStr = item.slice(0, lastPointIndex);
      // 包含. 文件后缀名字 比如 .jpg
      let endStr = item.slice(lastPointIndex);
      if (index === 0) {
        // console.log("文件夹里面是啥", path.join(pathName, foldFilesArr[index]), path.join(pathName, optimizeFoldName+endStr));
        my_rename(path.join(pathName, foldFilesArr[index]), path.join(pathName, optimizeFoldName + endStr));
        return;
      }
      // console.log("文件夹里面是啥", path.join(pathName, foldFilesArr[index]), path.join(pathName, optimizeFoldName + "-" + index + endStr));
      my_rename(path.join(pathName, foldFilesArr[index]), path.join(pathName, optimizeFoldName + "-" + index + endStr));
    });
    console.log(fold + "    这个文件夹重命名成功！");
    return;
    // 找到后缀名
    let tempIndex = foldFiles[maxIndex].lastIndexOf(".");
    let suffix = foldFiles[maxIndex].slice(tempIndex);
    // 重命名操作
    // my_rename(path.join(pathName, foldFiles[maxIndex]), path.join(pathName, fold + "" + suffix));
    console.log("文件夹里面是啥", path.join(pathName, foldFiles[maxIndex]), path.join(pathName, fold + "" + suffix));
    console.log("重命名成功！已和文件夹名字保持了一致！");
    return;
    // 紧接着把xxx12.13.14改成12.13.14xxx
    let fullPathname = path.join(pathName, fold + "" + suffix);
    for (let i in fullPathname) {
      // console.log(fullPathname);//F:\downloads\temp2\temp\t\BlacksOnBlondes.18.03.20.Natasha.Nice.XXX.1080p.MP4-KTR[rarbg]\BlacksOnBlondes.18.03.20.Natasha.Nice.XXX.1080p.MP4-KTR[rarbg].mp4
      // return
      let tempIndex = fullPathname.lastIndexOf("\\");
      let tempPathName = fullPathname.slice(0, tempIndex) + "\\";
      // console.log('tempPath',tempPathName);//F:\downloads\temp2\temp\t\BlacksOnBlondes.18.03.20.Natasha.Nice.XXX.1080p.MP4-KTR[rarbg]\
      let item = fullPathname.slice(tempIndex + 1);
      // console.log('item',item);//BlacksOnBlondes.18.03.20.Natasha.Nice.XXX.1080p.MP4-KTR[rarbg].mp4
      // return
      if (isNum(item[i]) && isNum(item[parseInt(i) + 1]) && item[parseInt(i) + 2] === ".") {
        // if ((isNum(item[i])) && (isNum(item[i + 1]))) {
        // if ((isNum(item[i]))) {
        // 找到了从左往右第一个数字
        if (isNum(item[parseInt(i) + 7]) || isNum(item[parseInt(i) + 8]) || isNum(item[parseInt(i) + 9])) {
          let temp = "";
          for (var j = 0; j < 8; j++) {
            temp += item[parseInt(i) + j];
          }
          temp += ".1080Ph265shana.";
          // console.log('temp',temp);
          // console.log('tAndTandI',tempPathName+temp+item);
          // return
          my_rename(fullPathname, tempPathName + temp + item);
          console.log("oumei重命名完成！");
          break;
        }
      }
    }
  });
}
my_foldNameTofile();
